#ifndef __IFactoryRecord_H__
#define __IFactoryRecord_H__

#include "IXmlNode.h"
#include "../IReferenceCounted.h"
#include "ETagResult.h"

namespace lampe{
namespace xml{

class IXMLFactoryEnvironment;



class IFactoryRecord:public virtual IReferenceCounted{
public:
	/***
	 * Обработчик XML узла. Вызывается XML средой как только нахоидт указанный узел
	 *
	 * @param environment XML среда
	 * @param node обрабатываемый узел
	 * @return результат выполнения
	 * */
	virtual lampe::xml::TagResult tagHandlerBefor(lampe::xml::IXMLFactoryEnvironment*environment,lampe::xml::IXmlNode*node){return lampe::xml::NEXT;}
	
	/***
	 * Обработчик XML узла. Вызывается XML средой после того как обработанны все вложенные узлы
	 *
	 * @param environment XML среда
	 * @param node обрабатываемый узел
	 * @return результат выполнения
	 * */
	virtual lampe::xml::TagResult tagHandlerAfter(lampe::xml::IXMLFactoryEnvironment*environment,lampe::xml::IXmlNode*node){return lampe::xml::NEXT;}
	
	/***
	 * Обработчик атрибута XML узла. Вызывается XML средой как только находит обрабатываемый атрибут. Вызывается перед вызовом метода, который обрабатывает узел
	 *
	 * @param environment XML среда
	 * @param node обрабатываемый узел
	 * @return результат выполнения
	 * */
	virtual lampe::xml::TagResult attributeHandler(lampe::xml::IXMLFactoryEnvironment*environment,lampe::xml::IXmlNode*node,lampe::u32 index){return lampe::xml::NEXT;}

	/***
	 * Возвращяет все обрабатываемые узлы
	 *
	 * @return массив из строк названий узлов, которые обрабатывает данный обработчик
	 * */
	virtual LAMPE_VECTOR_VENDOR<String> getProcessedTags(){return LAMPE_VECTOR_VENDOR<String>();};
	
	/***
	 * Возвращяет все обрабатываемые атрибуты
	 *
	 * @return массив из строк названий атрибутов, которые обрабатывает данный обработчик
	 * */
	virtual LAMPE_VECTOR_VENDOR<String> getProcessedAttributes(){return LAMPE_VECTOR_VENDOR<String>();};
};

}//namespace xml
}//namespace lampe
#endif
